package org.javaboy.cluster_demo.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 直连交换机配置
 */
@Configuration
public class DirectConfig {

    /**
     * 直连交换机名称
     */
    public static final String DIRECT_EXCHANGE = "direct-exchange";
    /**
     * 直连交换机路由的 key
     */
    public static final String DIRECT_ROUTINGKEY = "direct.routingkey";

    /**
     * 两个队列的名称
     */
    public static final String DIRECT_QUEUE01 = "direct-queue-01";
    public static final String DIRECT_QUEUE02 = "direct-queue-02";

    @Bean
    Queue directQueue01() {
        return new Queue(DIRECT_QUEUE01, true, false, false);
    }

    /**
     * 如果配置出错，需要先去网页上删除队列，然后再修改代码重新启动程序
     *
     * @return
     */
    @Bean
    Queue directQueue02() {
        return new Queue(DIRECT_QUEUE02, true, false, false);
    }

    /**
     * 直连交换机
     *
     * @return
     */
    @Bean
    DirectExchange directExchange() {
        // 直连交换机名称，是否持久化，是否自动删除
        // 持久化：服务器重启，交换机还在
        // autoDelete: 交换机是否绑定到队列，没有绑定到队列的交换机会自动删除
        return new DirectExchange(DIRECT_EXCHANGE, true, false);
    }

    @Bean
    Binding directBinding01() {
        return BindingBuilder
                //将 directExchange 和 directQueue01 绑定
                .bind(directQueue01())
                .to(directExchange())
                // 路由的 key，将来发送消息的时候，消息生产者需要三个参数：
                //1.交换机名称，2.路由的 key，3.消息内容
//                .with("routingkey01");
                //这个方法默认使用队列的名字作为 routingKey
                .withQueueName();
    }
    @Bean
    Binding directBinding02() {
        return BindingBuilder
                //将 directExchange 和 directQueue01 绑定
                .bind(directQueue02())
                .to(directExchange())
                // 路由的 key，将来发送消息的时候，消息生产者需要三个参数：
                //1.交换机名称，2.路由的 key，3.消息内容
//                .with("routingkey01");
                //这个方法默认使用队列的名字作为 routingKey
                .withQueueName();
    }
}
